home *** CD-ROM | disk | FTP | other *** search
- ;****************************************************************************
- ;* Module contenant des fonctions DOS de base pour lire un overlay
- ;* ATTENTION toutes ces fonctions sont de type NEAR
- ;*
- ;* Programmé par Sébastien Granjoux
- ;* Commencé le 19/02/95
- ;* Modification le 19/02/95
-
- IDEAL
-
- INCLUDE "CRYSLOAD.INC"
-
- PUBLIC USEOVL
-
- SEGMENT CSEG PARA PUBLIC USE16 'CODE'
-
- ASSUME cs:CSEG
-
- UseOvl:
- FILESYS <OFFSET openovl,OFFSET closeovl,OFFSET seekovl,OFFSET readovl>
-
- Handle DW -1
-
- ;***************************************************************************
- ;* Ouvre un fichier en mode lecture, ATTENTION il ne peut y avoir
- ;* qu'un seul fichier ouvert en même temps
- ;*
- ;* Entrée:
- ;* DS:DX position dans l'overlay du fichier
- ;*
- ;* Sortie:
- ;* AX erreur si C=1
-
- PROC openovl
-
- mov ah,51h
- int 21h
- jc @@error
- push dx
- push ds
- push es
- push di
- mov ds,bx
- mov ax,[ds:2Ch]
- mov ds,ax
- mov es,ax
- xor di,di
- mov cx,0ffffh
- xor al,al
- @@next_envstr:
- repne scasb
- scasb
- jne @@next_envstr
- scasw
- mov dx,di
- pop di
- pop es
- mov ax,3d00h
- int 21h
- pop cx
- pop dx
- jc @@error
- mov [cs:Handle],ax
- mov bx,ax
- mov ax,4200h
- int 21h
- @@error:
- ret
- ENDP
-
- ;***************************************************************************
- ;* Lit un block d'octet dans un overlay précédament ouvert
- ;*
- ;* Entrée:
- ;* CX nombre d'octet à lire
- ;* DS:DX adresse du buffer recevant les données
- ;*
- ;* Sortie:
- ;* AX erreur si C=1
-
- PROC readovl
-
- mov bx,[cs:Handle]
- mov ah,3Fh
- int 21h
- ret
-
- ENDP
-
- ;***************************************************************************
- ;* Se déplace dans l'overlay par rapport à la position courante
- ;*
- ;* Entrée:
- ;* CX:DX nouvelle position dans l'overlay
- ;*
- ;* Sortie:
- ;* AX erreur si C=1
-
- PROC seekovl
-
- mov ax,4201h
- mov bx,[cs:Handle]
- int 21h
- ret
-
- ENDP
-
- ;***************************************************************************
- ;* Ferme l'overlay ouvert précédament
- ;*
- ;* Sortie:
- ;* AX erreur si C=1
-
- PROC closeovl
-
- mov ah,3eh
- mov bx,[cs:Handle]
- int 21h
- ret
-
- ENDP
-
- ENDS
-
- END